# Author:Foru

#dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

#print("dict['Name']: ", dict['Name'])
#print("dict['Age']: ", dict['Age'])

# 序列中的每个值都有对应的位置值，称之为索引，第一个索引为0，第二个索引则为1，以此类推，还能反向索引
# 创建一个列表，只要把逗号分隔的不同数据项使用方括号括起来即可
list1 = ['xiao','bai',101,666]
list2 = ['a','b','c','d']
list3 = ['hello','hi','nihao','wohao']
print(list1)
print(list2)
print(list3)

# 列表
stu_id = [101,102,104,105,101,109]
names = ["So", "Mike", "Jan"]
# 思考，如何取出所有位置101的index
print(stu_id.index(101))
# index方法检查字符串中是否包含子字符串str，如果在则会显示该子字符串在字符串中的位置
# 思考得出，list的index()方法是在list中找到第一个匹配的值。并不能找出所有位置。
print(list(enumerate(stu_id)))
# 利用list(enumerate())可获取每个值所在的位置（即每个位置对应的数值）
print([i for i,x in enumerate(stu_id) if x == 101]) # 该方式可获取所有位置的101

# 列表的私有方法

# 1.增加的方法（更新）
## 1.1增加append() 增加在list的末尾
names.append("Foru") # 加字符串需要加双引号，数字不用
print(names)
names.append(1)
print(names)

## 1.2 插入 insert() 可以在指定位置增加元素
names.insert(1,'bang') # 即，加在 1 的位置上
print("insert之后的names:",names)

# 2. 删除 remove 和 pop
## 优势：如果删除list中多个元素时，remove比较合适
names.remove("Jan")
print(names)
"""
Remove first occurrence of value.
Raises ValueError if the value is not present.
"""
## 2.1 remove()一般情况下 使用remove先用in做判断
if "So" in names:
     names.remove("So")
print("remove删除的结果：",names)

## 2.2 pop() 删除位置为-1的这个元素
names.pop(-1)
print("pop()方法后的names:",names)

## 3. index()索引 查看该元素如101 在stu_id中第一个出现的位置索引
print(stu_id.index(101))

## 4. clear()清除所有数据
# names.clear()
# print("清除names列表后的值：",names)

## 5.count()查看列表元素出现的个数，（简单应用）统计分数出现的次数
print("count方法的结果:",stu_id.count(101))
print(names)

## 6. extend() 是给指定的list进行扩充
names.extend(stu_id)
print(names) # 在names列表中加入了stu_id

## 7.使用方括号[]的形式截取字符（第1位开始，第3位结束，即截取1，2位）
print(names[1:3])

## +号用于组合列表，*号用于重复列表
list4 = ['hi!']*4
print(list4)

# 列表的其他方法(Sequence Types 的一些方法)
## 1. len()查看list长度
print("names的长度/names的列表元素个数：",len(names))
## 2. in 查看元素是否存在list当中,结果为布尔值，False/True,
##    一般在操作list的修改和删除时会先判断
print("Foru" in names)
print(min(stu_id)) #列表元素中的最大最小值

# 字典

## 创建字典的常用方法
## 1.1方法一：info = {"键key"："值value"},键值对键用逗号分隔，键和值对用冒号分隔
info = {
    "stu1801":"ZiQi",
    "stu1802":"XiaoFeng",
    "stu1803":"LiuYu"
}
print(info)

## 1.2方法二：info2 = dict(key=value)
info2 = dict(stu1801="ZiQi",stu1802="XiaoFeng",stu1803="LiuYu")
print(info2)

## 1.3方法三：
info3 = {}
info3["stu1801"]="ZiQi"
info3["stu1802"]="XiaoFeng"
info3["stu1803"]="LiuYu"
print(info3)

## 特性
## dict是无序的。key是唯一的,不可变性的。

## 2.1增加
info["stu1804"]="Zhichao"
print(info)

## 2.2修改
info["stu1804"]="foru"
print(info)

## 2.3删除
info.pop("stu1804") #标准删除
print(info)

del info["stu1801"] # 用del删除，删除键
print(info)

#del info 删除字典

info.popitem() # 随机删除
print(info)

## 2.4查找
people = {"name1":"foru","name2":"xiaocai","name3":"hhu"}
print("name1" in people) # 标准用发，存在为True

print(people.get("name1")) # 获取，输入前面的键

print(people["name1"]) # 同标准用法，但是输出是值对，如果一个key不存在，就报错，get不会，不存在只返回None

print(people.get("name5"))

## 注意点
### 1）不允许同一个键出现两次。创建时如果同一个键被赋值两次，后一个值会被记住
